/*
题目: 删除字符使频率相同
给你一个下标从 0 开始的字符串 word ，字符串只包含小写英文字母。你需要选择 一个 下标并 删除 下标处的字符，使得 word 中剩余每个字母出现 频率 相同。

如果删除一个字母后，word 中剩余所有字母的出现频率都相同，那么返回 true ，否则返回 false 。

注意：

    字母 x 的 频率 是这个字母在字符串中出现的次数。
    你 必须 恰好删除一个字母，不能一个字母都不删除。

https://leetcode.cn/contest/biweekly-contest-88/problems/remove-letter-to-equalize-frequency/
 */
public class EqualFrequency {
    public boolean equalFrequency(String word) {
        int n = word.length();
        // 记录每个字母的频率
        int[] freq = new int[1000];
        // 记录每个 频率 的出现次数
        int[] cnt = new int[1000];
        int maxn = 0; // 记录最大频率

        for (int i = 0; i < n; i ++) {
            char ch = word.charAt(i);
            int pos = ch - 'a';

            freq[pos] ++;
            cnt[freq[pos] - 1] --;
            cnt[freq[pos]] ++;
            maxn = Math.max(maxn, freq[pos]);
        }

        return (maxn == 1) || (cnt[maxn] * maxn + 1 == n) || (cnt[maxn - 1] * (maxn - 1) + maxn == n);
    }
}
